/**
 * @file BFS.h
 * @author BadFatCat0919 (543015378@qq.com)
 * @brief BFS类
 */

#ifndef __BFS_H__
#define __BFS_H__

#include "Dispatcher.h"
#include <list>
#include "Direction.h"

/**
 * @brief BFS地图结点类
 */
class BFSNode {
public:
    int x, y; // 栅格坐标
    int dir; // 方向
    double cost = 0; // 目前的代价
    BFSNode* parent = nullptr; // 父结点
    std::list<BFSNode *> childs; // 所有孩子节点

public:
    void moveStep(int dir);
    BFSNode(int x, int y, double cost, int parentDir, int dir);
};

/**
 * @brief BFS类
 */
class BFS {
public:
    static std::list<Cmd> getAvoidCmdSeq(int x, int y, bool isEmpty, Dispatcher *dispatcher, int minSteps);
};

#endif
